console.log('======注册全局方法')

/* element相关全局方法，挂载在 */
import store from '@/store'
import router from '@/router'
/**
 * 一个带加载的回调
 */
Vue.prototype.$loadingFn = async function(fn, text = '') {
  try {
    Vue.prototype.$loading(text)
    fn && await fn()
    Vue.prototype.$hideLoading()
    return true
  } catch (err) {
    Vue.prototype.$hideLoading()
    return Promise.reject(err)
  }
}

/**
 * 根据name跳转路由
 * @param {String} name 路由名
 * @param {Object} query 路由参数，加在路径上
 */
Vue.prototype.$pushTo = function(name, query = {}, params = {}) {
  console.log(query)
  router.push({ name, query, params })
}
/**
 * 根据name跳转路由
 * @param {String} name 路由名
 * @param {Object} query 路由参数，加在路径上
 * @param {Object} params
 */
Vue.prototype.$replaceTo = function(name, query = {}, params = {}) {
  router.replace({ name, query, params })
}

/**
 * 批量设置data
 * @param {Object} parmas
 */
Vue.prototype.$setData = function(parmas) {
  for (const key in parmas) {
    this[ key ] = parmas[ key ]
  }
}

/**
 * 挂载全局监听器
 */
Vue.prototype.$event = new Vue()

/**
 * 获取对应桶state值
 * @param {String} name 存储桶名称
 * @param {String} key key值
 */
Vue.prototype.$getState = function(name, key) {
  // eslint-disable-next-line no-prototype-builtins
  if (store.state.hasOwnProperty(name) && store.state[ name ].hasOwnProperty(key)) {
    return store.state[ name ][ key ]
  }
  return ''
}

/**
 * 获取对应桶getter值
 * @param {String} name getters名
 */
Vue.prototype.$storeGet = function(name) {
  // eslint-disable-next-line no-prototype-builtins
  if (store.getters.hasOwnProperty(name)) {
    return store.getters[ name ]
  }
  return ''
}

/**
 * commit方法
 * @param {String} name commit方法名！！
 * @param {Any} params 参数
 */
Vue.prototype.$storeCommit = function(name, params) {
  store.commit(name, params)
}
/**
 * actions方法
 * @param {String} name action方法名!!
 * @param {Any} params 参数
 */
Vue.prototype.$storeAction = function(name, params) {
  return store.dispatch(name, params)
}
